import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

//ArrayList 的应用
public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(10);
        arrayList.add(14);
        arrayList.add(11);
        arrayList.add(20);
        arrayList.add(19);
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i)+" ");
        }
        System.out.println();
        System.out.println("_________");
        for (Integer x:arrayList) {
            System.out.print(x+" ");
        }
        System.out.println();
        System.out.println("____Iterator_____");
        //使用迭代器，遍历顺序表   默认是从0下标开始打印
        Iterator<Integer> it= arrayList.iterator();//Iterator是一个接口
        while(it.hasNext()){//若下一个数存在，就满足条件
            System.out.print(it.next()+" ");//打印下一个
        }
        System.out.println();
        System.out.println("____ListIterator_____");
        //第二种方法
        ListIterator<Integer> it2= arrayList.listIterator();//listIterator实现了Iterator接口
        while(it.hasNext()){//若下一个数存在，就满足条件
            System.out.print(it2.next()+" ");
        }
        System.out.println();
        System.out.println("____ListIterator倒着打印_____");
        //第二种方法  倒着遍历
        ListIterator<Integer> it3= arrayList.listIterator(arrayList.size());//从arrayList.size（顺序表的末尾）开始遍历
        while(it3.hasPrevious()){//若上一个数存在，就满足条件
            System.out.print(it3.previous()+" ");
        }
        System.out.println();
    }
    public static void main4(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(10);
        arrayList.add(14);
        arrayList.add(11);
        arrayList.add(20);
        arrayList.add(19);
        System.out.println(arrayList);

        List<Integer> list=arrayList.subList(1,3);//截取下标为[1，3)的值
        System.out.println(list);
        list.set(0,99);
        System.out.println(list);
        System.out.println(arrayList);

    }
    public static void main33(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(10);
        arrayList.add(11);
        arrayList.add(14);
        arrayList.add(20);

        arrayList.remove(1);//参数是下标
        arrayList.remove(Integer.valueOf(10));//通过valueOf找到10并返回他的下标
        System.out.println(arrayList);
    }
    public static void main3(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(10);
        arrayList.add(20);

        ArrayList<Integer> arrayList1=new ArrayList<>();
        //这里是将arrayList中的10和20全部添加到了arrayList1中
        arrayList1.addAll(arrayList);//addAll:将数据一次性添加
        System.out.println(arrayList1);
    }
    public static void main2(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(19);
        System.out.println(arrayList);

        ArrayList<Integer> arrayList1=new ArrayList<>(arrayList);
    }
    public static void main1(String[] args) {
        //两种创建的顺序表的 类型是不一样的
        //arrayList 访问的是当前对象的方法，方法包括了list接口中的方法，
//原因是ArrayList继承了List接口
        ArrayList<Integer> arrayList=new ArrayList<>();

        //通过list访问的是list接口中的方法
        List<Integer> list =new ArrayList<>();
    }
}
